package com.ruoyi.gxdj.controller;

import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.annotation.CheckWechatToken;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.gxdj.Vo.AnswerListVo;
import com.ruoyi.gxdj.Vo.QuestionVo;
import com.ruoyi.gxdj.domain.InfoQuestionNaire;
import com.ruoyi.gxdj.domain.InfoQuestionNaireLog;
import com.ruoyi.gxdj.service.IInfoQuestionNaireLogService;
import com.ruoyi.gxdj.service.IInfoQuestionNaireService;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;

/**
 * 答题结果Controller
 * 
 * @author ruoyi
 * @date 2024-03-16
 */
@RestController
@RequestMapping("/wechat/InfoQuestionNaireLog")
public class WeChatInfoQuestionNaireLogController extends BaseController
{
    @Autowired
    private IInfoQuestionNaireLogService infoQuestionNaireLogService;

    @Autowired
    private IInfoQuestionNaireService infoQuestionNaireService;

    @Autowired
    private HttpServletRequest request;

    @Autowired
    private ISysUserService sysUserService;


    @GetMapping("/list")
    public AjaxResult list(InfoQuestionNaire infoQuestionNaire)
    {
        String taken = request.getHeader("taken");
        if (StringUtils.isEmpty(taken)){
            List<InfoQuestionNaire> list = infoQuestionNaireService.selectInfoQuestionNaireList(infoQuestionNaire);
            return AjaxResult.success(list);
        }
        SysUser user = sysUserService.selectUserByOpenId(taken);
        List<InfoQuestionNaire> list = infoQuestionNaireService.selectInfoQuestionNaireList(infoQuestionNaire);
        for (InfoQuestionNaire questionNaire : list) {
            InfoQuestionNaireLog infoQuestionNaireLog1 = new InfoQuestionNaireLog();
            infoQuestionNaireLog1.setQuestionId(questionNaire.getId());
            infoQuestionNaireLog1.setUserId(user.getUserId());
            InfoQuestionNaireLog infoQuestionNaireLog =  infoQuestionNaireLogService.selectInfoQuestionNaireLogBy(infoQuestionNaireLog1);
            if (StringUtils.isNotNull(infoQuestionNaireLog)){
                questionNaire.setSumScore(infoQuestionNaireLog.getSumScore());
            }
        }
        return AjaxResult.success(list);
    }

    /**
     * 详情接口
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public AjaxResult getInfo(@PathVariable Long id){
        InfoQuestionNaire infoQuestionNaire = infoQuestionNaireService.selectInfoQuestionNaireById(id);
        return AjaxResult.success(infoQuestionNaire);
    }

    @GetMapping("/listByUser")
    public AjaxResult listByUser(InfoQuestionNaireLog infoQuestionNaireLog)
    {
        String taken = request.getHeader("taken");
        SysUser user = sysUserService.selectUserByOpenId(taken);
        infoQuestionNaireLog.setUserId(user.getUserId());
        List<InfoQuestionNaireLog> list = infoQuestionNaireLogService.selectInfoQuestionNaireLogList(infoQuestionNaireLog);
        for (InfoQuestionNaireLog questionNaireLog : list) {
            InfoQuestionNaire infoQuestionNaire = infoQuestionNaireService.selectInfoQuestionNaireById(questionNaireLog.getQuestionId());
            questionNaireLog.setQuestionTitle(infoQuestionNaire.getQuestionTitle());
        }
        return AjaxResult.success(list);
    }


    /**
     * 提交
     *
     * @param infoQuestionNaireLog
     * @return
     */
//    @CheckWechatToken
    @RequestMapping(value = "/submitNaireLog", method = RequestMethod.POST)
    public AjaxResult submitNaireLog(@RequestBody InfoQuestionNaireLog infoQuestionNaireLog) {
        infoQuestionNaireLog.setCreateTime(new Date());
        String token = request.getHeader("taken");
        if (StringUtils.isEmpty(token)){
            return AjaxResult.error("请先登录");
        }
       SysUser sysUser =  sysUserService.selectUserByOpenId(token);
        infoQuestionNaireLog.setUserId(sysUser.getUserId());
        String questionContent = infoQuestionNaireLog.getQuestionContent();
        //转成对象
        List<QuestionVo> questionVos = JSON.parseArray(questionContent, QuestionVo.class);
        float sumScore = 0;
        for (QuestionVo questionVo : questionVos) {
            int isCheckedId = questionVo.getIsChecked();
            List<AnswerListVo> answerList = questionVo.getAnswerList();
            for (AnswerListVo answerListVo : answerList) {
                int selectedId = answerListVo.getSelectedId();
                if (isCheckedId == selectedId) {
                    sumScore = sumScore + answerListVo.getScore();
                    break;
                }
            }
        }
        infoQuestionNaireLog.setSumScore(sumScore);
        //需要吧文件id传过来
        int i = infoQuestionNaireLogService.insertInfoQuestionNaireLog(infoQuestionNaireLog);
        return toAjax(i);
    }
}
